#include "music.h"
#include<QUuid>
#include<QCoreApplication>
#include<QSqlQuery>
#include<QSqlError>
Music::Music()
    :_isLike(false),_isHistory(false)
{

}

Music::Music(const QUrl &url)
    :_musicUrl(url),_isLike(false),_isHistory(false)
{
    //给每一个music对象一个唯一的标识；
    _id = QUuid::createUuid().toString();
    this->parseMediaMetaData();
}

void Music::setMusicName(const QString &musicName)
{
    _musicName = musicName;

}

void Music::setMusicSinger(const QString &musicSinger)
{
    _musicSinger = musicSinger;
}

void Music::setMusicAlbumn(const QString &musicAlbumn)
{
    _musicAlbumn = musicAlbumn;
}

void Music::setIsLike(bool isLike)
{
    _isLike = isLike;
}

void Music::setMusicDuration(quint64 duration)
{
    _duration = duration;
}

void Music::setIsHistory(bool isHistory)
{
    _isHistory = isHistory;
}

void Music::setMusicUrl(const QUrl &musicUrl)
{
    _musicUrl = musicUrl;
}

qint64 Music::getDuration()const
{
    return _duration;
}

QString Music::getMusicName()const
{
    return _musicName;
}

QString Music::getMusicSinger()const
{
    return _musicSinger;
}

QString Music::getMusicAlbumn()const
{
    return _musicAlbumn;
}

bool Music::getIsLike()const
{
    return _isLike;
}

bool Music::getIsHistory()const
{
    return _isHistory;
}

QUrl Music::getMusicUrl()const
{
    return _musicUrl;
}

QString Music::getId() const
{
    return _id;
}

QString Music::getLrcFilePath() const
{
    QString path = _musicUrl.toLocalFile();
    //替换文件后缀；
    path.replace(".mp3", ".lrc");
    path.replace(".flac", ".lrc");
    path.replace(".mpga", ".lrc");
    return path;
}

void Music::setMusicId(const QString &musicId)
{
    _id = musicId;
}

void Music::insertMusicToDB()
{
    //第一步，先查找；
    QSqlQuery query;
    //如果存在则返回true，失败返回false；
    query.prepare("SELECT EXISTS (SELECT 1 FROM musicInfo WHERE musicId = ?)");
    query.addBindValue(_id);
    if(!query.exec())
    {
        //查询失败；
        qDebug()<<"查询失败";
        return;
    }
    if(query.next())
    {
        bool isExists = query.value(0).toBool();
        if(isExists)
        {
            //第二部，在，进行跟新isLike and isHistory;
            query.prepare("UPDATE musicInfo SET isLike=?,isHistory=? WHERE musicId=?");
            query.addBindValue(_isLike?1:0);
            query.addBindValue(_isHistory?1:0);
            query.addBindValue(_id);
            if(!query.exec())
            {
                qDebug()<<"更新失败"<<query.lastError().text();
                return;
            }
            qDebug()<<"更新信息："<<_musicName<<":"<<_id;
        }
        else
        {
            //第三部，不在，需要插入；
            query.prepare("INSERT INTO musicInfo(musicId,musicName,musicSinger,albumName,musicUrl,duration,isLike,isHistory)VALUES(?,?,?,?,?,?,?,?)");
            query.addBindValue(_id);
            query.addBindValue(_musicName);
            query.addBindValue(_musicSinger);
            query.addBindValue(_musicAlbumn);
            query.addBindValue(_musicUrl.toLocalFile());
            query.addBindValue(_duration);
            query.addBindValue(_isLike ? 1 : 0);
            query.addBindValue(_isHistory? 1 : 0);
            if(!query.exec())
            {
                qDebug()<<"插⼊失败: "<<query.lastError().text();
                 return;

            }
             qDebug()<<"插入信息："<<_musicName<<":"<<_id;
        }

    }
}

void Music::parseMediaMetaData()
{

    //先创建QMediaPlayer对象；
    QMediaPlayer musicPlayer;
    //设置播放源；
    musicPlayer.setMedia(_musicUrl);
    while(!musicPlayer.isMetaDataAvailable())
    {
        //需要一直在等待
        QCoreApplication::processEvents();
    }
    //通过媒体源获取数据了
    _musicName = musicPlayer.metaData("Title").toString();
    _musicSinger = musicPlayer.metaData("Author").toString();
    _musicAlbumn = musicPlayer.metaData("AlbumTitle").toString();
    _duration = musicPlayer.metaData("Duration").toLongLong();

    //其中有一些没有歌名等等等的；
    QString fileName = _musicUrl.fileName();
//    qDebug()<<fileName;
    int index = fileName.indexOf('-');
    if(_musicName.isEmpty())
    {
        //说明没有名字；
        if(index!=-1)
        {
            //说明找到了‘-’；
            _musicName = fileName.mid(0,index).trimmed();
        }
        else
        {
            _musicName = fileName.mid(0,fileName.indexOf('.')).trimmed();
        }
    }
    if(_musicSinger.isEmpty())
    {
        if(index!=-1)
        {

            _musicSinger = fileName.mid(index+1,fileName.indexOf('.') - index - 1).trimmed();
        }
        else
        {
            _musicSinger = "未知歌手";
        }
    }
    if(_musicAlbumn.isEmpty())
    {
        _musicAlbumn = "未知专辑";
    }
    qDebug()<<_musicName<<":"<<_musicSinger<<":"<<_musicAlbumn<<":"<<_duration<<endl;

}
